# encoding: utf-8
# author: walker
# date: 2014-03-07
# summary: 深度遍历指定目录，并将子目录和文件名改为小写
# 注意，此程序只针对windows，windows下文件（夹）名不区分大小写

import os
import time

StartTime = time.time()

# 需要处理目录的绝对路径
FileRoots = [r'E:\样例数据\cnipapatent\cnipapatent_cover_20181029']



def Main():
    # 先修改文件名
    count = 0
    for FileRoot in FileRoots:
        for parent, dirnames, filenames in os.walk(FileRoot):
            for filename in filenames:
                count += 1
                srcFile = os.path.join(parent, filename)
                dstFile = os.path.join(parent, filename.lower())
                if srcFile == dstFile:  # 如果文件名本身就是全小写
                    continue
                if count % 1000 == 1:
                    print(count)
                os.rename(srcFile, dstFile)

    # 这里注意topdown参数。
    # topdown决定遍历的顺序，
    # 如果topdown为True，则先列举top下的目录，然后是目录的目录，依次类推；
    # 反之，则先递归列举出最深层的子目录，然后是其兄弟目录，然后父目录。
    # 我们需要先修改深层的子目录
    for FileRoot in FileRoots:
        for parent, dirnames, filenames in os.walk(FileRoot, topdown=False):
            for dirname in dirnames:
                srcDir = os.path.join(parent, dirname)
                dstDir = os.path.join(parent, dirname.lower())
                if srcDir == dstDir:  # 如果文件夹名本身就是全小写
                    continue
                os.rename(srcDir, dstDir)


if __name__ == '__main__':
    Main()
    print('Time total: %.2fs' % (time.time() - StartTime))
    print('Current time: %s' % time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time())))
